335a448094a5b3c35b7a6d3dccef184a0b0fb599,crud/src/main/java/com/redhat/lightblue/mediator/Mediator.java,Mediator,save,#SaveRequest#,183
Before Change
Error.push("save(" + req.getEntityVersion().toString() + ")");
Response response = new Response(factory.getNodeFactory());
try {
OperationContext ctx = newCtx(req, CRUDOperation.SAVE);
response.setEntity(ctx.getTopLevelEntityName(),ctx.getTopLevelEntityVersion());
EntityMetadata md = ctx.getTopLevelEntityMetadata();
if (!md.getAccess().getUpdate().hasAccess(ctx.getCallerRoles())
After Change
Response response = new Response(factory.getNodeFactory());
OperationContext ctx=null;
try {
ctx = newCtx(req, CRUDOperation.SAVE);
ctx.measure.begin("save");
response.setEntity(ctx.getTopLevelEntityName(),ctx.getTopLevelEntityVersion());
EntityMetadata md = ctx.getTopLevelEntityMetadata();
if (!md.getAccess().getUpdate().hasAccess(ctx.getCallerRoles())
|| (req.isUpsert() && !md.getAccess().getInsert().hasAccess(ctx.getCallerRoles()))) {
ctx.setStatus(OperationStatus.ERROR);
ctx.addError(Error.get(CrudConstants.ERR_NO_ACCESS, "insert/update " + ctx.getTopLevelEntityName()));
} else {
factory.getInterceptors().callInterceptors(InterceptPoint.PRE_MEDIATOR_SAVE, ctx);
CRUDController controller = factory.getCRUDController(md);
updatePredefinedFields(ctx, controller, md.getName());
runBulkConstraintValidation(ctx);
if (!ctx.hasErrors() && ctx.hasDocumentsWithoutErrors()) {
LOGGER.debug(CRUD_MSG_PREFIX, controller.getClass().getName());
controller.save(ctx, req.isUpsert(), req.getReturnFields());
ctx.getHookManager().queueMediatorHooks(ctx);
ctx.measure.begin("postProcessSavedDocs");
List<JsonDoc> updatedDocuments = ctx.getOutputDocumentsWithoutErrors();
if (updatedDocuments != null && !updatedDocuments.isEmpty()) {
response.setEntityData(JsonDoc.listToDoc(applyRange(req, updatedDocuments), factory.getNodeFactory()));
response.setResultMetadata(ctx.getOutputDocumentMetadataWithoutErrors());
response.setModifiedCount(updatedDocuments.size());
}
ctx.measure.end("postProcessSavedDocs");
if (!ctx.hasErrors() && !ctx.hasDocumentErrors()
&& updatedDocuments != null && updatedDocuments.size() == ctx.getDocuments().size()) {
ctx.setStatus(OperationStatus.COMPLETE);